package com.LachesismStorm.lachesism.member.controller;

import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.MathContext;

@RestController
@Api(tags = "ai")
@RequestMapping("/ai")
public class AIController {

    @GetMapping("/sse")
    public SseEmitter streamSse() throws IOException {
        SseEmitter emitter = new SseEmitter();

        // 需要计算的圆周率的小数位数
        int digitsToCalculate = 1000; // 假设计算100位圆周率

        // 计算圆周率
        BigDecimal pi = calculatePi(digitsToCalculate);

        // 转换为字符串，提取每一位数字
        String piString = pi.toString().replace(".", ""); // 去掉小数点

        // 确保piString的长度足够
        if (piString.length() <= 1) {
            emitter.completeWithError(new RuntimeException("圆周率计算结果不够长"));
            return emitter;
        }

        for (int i = 0; i < digitsToCalculate; i++) {
            // 检查索引是否越界
            if (i + 1 < piString.length()) {
                // 获取圆周率的每一位数字
                String digit = String.valueOf(piString.charAt(i + 1)); // +1 是因为 piString[0] 是整数部分
                emitter.send(digit); // 推送每一位数字
                System.out.println(digit); // 控制台输出每一位
            } else {
                emitter.send("0"); // 如果没有更多数字，填充0
            }
        }

        emitter.complete(); // 完成推送
        return emitter;
    }

    // 使用BigDecimal计算圆周率
    private BigDecimal calculatePi(int digits) {
        MathContext context = new MathContext(digits + 2); // 增加两位小数点后用于保证精度
        BigDecimal pi = new BigDecimal(Math.PI, context); // 使用Java内置的π值，保证大多数情况的精度
        return pi;
    }
}